ZeroMQ-এর Push/Pull প্যাটার্ন ব্যবহার করে একটি ওয়ার্কার পুল তৈরি করা অত্যন্ত কার্যকর এবং সাধারণ পদ্ধতি, যা ডিস্ট্রিবিউটেড সিস্টেমে লোড ব্যালেন্সিং এবং টাস্ক ডিস্ট্রিবিউশন সহজ করে তোলে। Push/Pull প্যাটার্নে Push সকেট টাস্ক পাঠায় এবং Pull সকেট সেই টাস্ক গ্রহণ করে প্রসেস করে। এটি একাধিক ওয়ার্কার প্রসেস বা থ্রেডে কাজ ভাগ করে দিয়ে কাজের দক্ষতা বাড়াতে সাহায্য করে।
Push/Pull প্যাটার্নে ওয়ার্কার পুলের কাজের প্রক্রিয়া:
Producer (Push):
- প্রোডিউসার সকেট বিভিন্ন টাস্ক তৈরি করে এবং সেগুলো Push সকেটের মাধ্যমে পাঠায়।
- প্রোডিউসার টাস্কগুলো দ্রুত পাঠাতে পারে এবং একের পর এক টাস্ক ওয়ার্কারদের কাছে প্রেরণ করে।
Worker Pool (Pull):
- ওয়ার্কার পুলে এক বা একাধিক ওয়ার্কার সকেট থাকে, যা Pull সকেটের মাধ্যমে টাস্ক গ্রহণ করে।
- প্রতিটি ওয়ার্কার টাস্ক প্রসেস করে এবং প্রসেসিং সম্পন্ন হলে পরবর্তী টাস্কের জন্য প্রস্তুত থাকে।
Python কোড (ZeroMQ ব্যবহার করে):
নিচে ZeroMQ ব্যবহার করে একটি Worker Pool তৈরি করার জন্য Python কোড উদাহরণ দেওয়া হলো:
Producer কোড (Push):
import zmq
import time
context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.bind("tcp://*:5557") # Producer binds to port 5557
for i in range(10): # 10 টাস্ক পাঠানো হবে
task = f"Task {i}"
print(f"Sending: {task}")
socket.send_string(task)
time.sleep(1) # প্রতিটি টাস্ক পাঠানোর আগে ১ সেকেন্ড অপেক্ষা করা
Worker কোড (Pull):
import zmq
import time
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.connect("tcp://localhost:5557") # Worker connects to producer
while True:
task = socket.recv_string()
print(f"Received: {task}")
time.sleep(2) # টাস্ক প্রসেসিংয়ের জন্য ২ সেকেন্ড সময় নেওয়া
print(f"Processed: {task}")
কোডের ব্যাখ্যা:
Producer (Push) কোড:
- প্রোডিউসার কোডে
zmq.PUSHটাইপ সকেট তৈরি করা হয়েছে, যা পোর্ট5557-এ কানেক্ট করা হয়েছে। - প্রোডিউসার প্রতি সেকেন্ডে একটি করে টাস্ক পাঠাচ্ছে, যা ১০টি টাস্ক পর্যন্ত চলতে থাকবে।
Worker (Pull) কোড:
- ওয়ার্কার কোডে
zmq.PULLটাইপ সকেট তৈরি করা হয়েছে, যা প্রোডিউসারের সাথে সংযুক্ত হয়ে টাস্ক গ্রহণ করছে। - ওয়ার্কার টাস্ক গ্রহণ করে এবং সেটি প্রসেসিং করে। এখানে টাস্ক প্রসেসিংয়ে ২ সেকেন্ড সময় নেওয়া হচ্ছে, যা বাস্তবে বড় এবং জটিল কাজের সময়ের মতো হতে পারে।
ওয়ার্কার পুল স্কেল করা:
এই প্যাটার্নে আপনি একাধিক ওয়ার্কার ব্যবহার করতে পারেন। প্রতিটি ওয়ার্কার একই tcp://localhost:5557 এ কানেক্ট করে এবং Push থেকে টাস্ক গ্রহণ করতে পারে। এটি লোড ব্যালেন্সিং নিশ্চিত করে, কারণ প্রতিটি ওয়ার্কার একটি করে টাস্ক গ্রহণ করে এবং প্রসেসিং সম্পন্ন করে।
Worker Pool এ স্কেল করার সুবিধা:
লোড ব্যালেন্সিং:
- একাধিক ওয়ার্কার টাস্ক গ্রহণ করায় লোড সমানভাবে ভাগ হয়। এটি নিশ্চিত করে যে কোনও একক ওয়ার্কার অতিরিক্ত লোডের মধ্যে পড়ে না।
স্কেলেবিলিটি:
- Worker Pool এ নতুন ওয়ার্কার যোগ করা সহজ। যত বেশি ওয়ার্কার যোগ করা হয়, তত বেশি স্কেল করা যায় এবং পারফরম্যান্স বাড়ানো যায়।
ফল্ট টলারেন্স:
- যদি একটি ওয়ার্কার ব্যর্থ হয়, অন্য ওয়ার্কার টাস্ক গ্রহণ করে প্রসেসিং চালিয়ে যেতে পারে, ফলে সিস্টেমের রিলায়েবিলিটি বাড়ে।
সংক্ষেপে:
ZeroMQ-এর Push/Pull প্যাটার্ন ফাইন্যান্সিয়াল মার্কেট ডেটা ডিস্ট্রিবিউশনে এবং অন্য যে কোনও অ্যাপ্লিকেশনে লোড ব্যালেন্সিং এবং টাস্ক ডিস্ট্রিবিউশন নিশ্চিত করতে কার্যকর। Worker Pool তৈরি করে আপনি টাস্কগুলিকে একাধিক ওয়ার্কারে ভাগ করে দিতে পারেন, যা সিস্টেমের কার্যকারিতা, পারফরম্যান্স, এবং রিলায়েবিলিটি বাড়াতে সহায়ক।
Read more